package com.foreveross.proxyip.infra.utils.param;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.foreveross.proxyip.infra.utils.NumberUtils;
import com.foreveross.proxyip.infra.utils.StringUtils;
/**
 * 获得整型类型参数值
 * @author xiangsf
 * @version $Revision$ $Date$
 * @since 0.5
 */
public class ParamIntegerUtils {
	/**
     * 获得页面请求中的整型值
     * <p>如果获得的值为空，则返回null</p>
     * @param request
     * @param name 参数名称
     * @return 
     */
    public static Integer getParameter(HttpServletRequest request, String name){
    	Integer value = null;
    	String temp = request.getParameter(name);
    	if(StringUtils.isNotEmpty(temp) && NumberUtils.isNumber(temp.trim())){
    		value = Integer.valueOf(temp.trim());
    	}
    	temp = null;
    	return value;
    }    
    /**
     * 获得页面请求中的整型值
     * <p>如果获得的值为空时，则返回传入的defaultValue值</p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认返回值
     * @return 
     */
    public static Integer getParameter(HttpServletRequest request, String name, Integer defaultValue){
    	Integer value = defaultValue;
    	String temp = request.getParameter(name);
    	if(StringUtils.isNotEmpty(temp) && NumberUtils.isNumber(temp.trim())){
    		value = Integer.valueOf(temp.trim());
    	}
    	temp = null;
    	return value;
    }
    /**
     * 获得页面请求中的整型值
     * <p>如果获得的值为空时，则返回传入的defaultValue值</p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认返回值
     * @return 值为false、off、0时返回false, 否则返回true
     */
    public static Integer getParameter(Map<String, String> params, String name, Integer defaultValue){
    	Integer value = defaultValue;
    	String temp = params.get(name);
    	if(StringUtils.isNotEmpty(temp) && NumberUtils.isNumber(temp.trim())){
    		value = Integer.valueOf(temp.trim());
    	}
    	temp = null;
    	return value;
    }
    /**
     * 获得页面请求中的整型值
     * <p>如果获得的值为空时，则返回传入的defaultValue值</p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认返回值
     * @return 值为false、off、0时返回false, 否则返回true
     */
    public static Integer getParameterMap(Map<String, String[]> params, String name, Integer defaultValue){
    	Integer value = defaultValue;
    	String[] temp = params.get(name);
    	if(temp != null && temp.length > 0 && StringUtils.isNotEmpty(temp[0]) && NumberUtils.isNumber(temp[0].trim())){
    		value = Integer.valueOf(temp[0].trim());
    	}
    	temp = null;
    	return value;
    }
    /**
     * 获得页面请求中的整型值
     * <p>如果获得的值为空时，则返回传入的defaultValue值</p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认返回值
     * @return 值为false、off、0时返回false, 否则返回true
     */
    public static Integer getParameterMapObject(Map<String, Object> params, String name, Integer defaultValue){
    	Integer value = defaultValue;
    	Object obj = params.get(name);
    	String[] temp = null;
    	if(obj instanceof String[]){
    		temp = (String[])obj;
    		if(temp != null && temp.length > 0 && StringUtils.isNotEmpty(temp[0]) && NumberUtils.isNumber(temp[0].trim())){
        		value = Integer.valueOf(temp[0].trim());
        	}
    	}
    	obj = null;
    	temp = null;
    	return value;
    }
    /**
     * 获得页面请求中的整型值集合
     * <p>
     * 如果没有该参数值对象，将返回一个长度为0的浮点型数组；
     * 当获得的值为空时，则该值为传入的defaultValue值
     * </p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认值
     * @return 返回浮点数组
     */
    public static Integer[] getParameters(HttpServletRequest request, String name, Integer defaultValue){
    	List<Integer> values = getListParameters(request,name, defaultValue) ;
    	return (Integer[])values.toArray(new Integer[]{});
    }
    /**
     * 获得页面请求中的整型值集合
     * <p>
     * 如果没有该参数值对象，将返回一个长度为0的浮点型list集合；
     * 当获得的值为空时，则该值为传入的defaultValue值
     * </p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认值
     * @return 返回浮点型list集合
     */
    public static List<Integer> getListParameters(HttpServletRequest request, String name, Integer defaultValue){
    	List<Integer> values = new ArrayList<Integer>();
    	String[] temp = request.getParameterValues(name);
    	if(temp != null && temp.length > 0){
    		for(int i = 0 ;i < temp.length; i++){
    			if(StringUtils.isNotEmpty(temp[i]) && NumberUtils.isNumber(temp[i].trim())){
    				values.add(Integer.valueOf(temp[i].trim()));
    	    	}else{
    	    		values.add(defaultValue);
    	    	}
    		}
    	}
    	temp = null;
    	return values;
    }
    /**
     * 获得页面请求中的浮点值集合
     * <p>
     * 如果没有该参数值对象，将返回一个长度为0的浮点型数组；
     * 当获得的值为空时，则该值为传入的defaultValue值
     * </p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认值
     * @return 返回浮点数组
     */
    public static Integer[] getParametersStartWith(HttpServletRequest request, String namePrefix, Integer defaultValue){
    	List<Integer> values = getListParametersStartWith(request, namePrefix, defaultValue);
    	return (Integer[])values.toArray(new Integer[]{});
    }
    /**
     * 获得页面请求中的浮点值集合
     * <p>
     * 如果没有该参数值对象，将返回一个长度为0的浮点型list集合；
     * 当获得的值为空时，则该值为传入的defaultValue值
     * </p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认值
     * @return 返回浮点list集合
     */
    public static List<Integer> getListParametersStartWith(HttpServletRequest request, String namePrefix, Integer defaultValue){
    	List<Integer> values = new ArrayList<Integer>();
    	Map<String,String[]> paras = request.getParameterMap();
    	String tempKey = null;
    	String temp = null;
    	for(Iterator<String> names = paras.keySet().iterator(); names.hasNext();){
    		tempKey = names.next();
    		if(tempKey.startsWith(namePrefix)){//以指定的字符串开头
    			if(paras.get(tempKey) != null && paras.get(tempKey).length > 0){
	    			temp = (paras.get(tempKey))[0];
	    			if(StringUtils.isNotEmpty(temp) && NumberUtils.isNumber(temp)){
	    				values.add(Integer.valueOf(temp));
	    	    	}else{
	    	    		values.add(defaultValue);
	    	    	}
    			}else{
    				values.add(defaultValue);
    			}
    		}
    	}
    	tempKey = null;
    	temp = null;
    	return values;
    }
    
    /**
	 * 从Map中获取指定键对应的int型数值
	 * @author zhouan, 2012-7-21
	 * @param params
	 * @param key
	 * @param defaultValue
	 * @return
	 */
	public static int getIntParameterFromMap(Map params, String key, int defaultValue) {
		Object obj = params.get(key);
		if (obj instanceof Object[]) {
			Object[] values = (Object[]) obj;
			return Integer.parseInt(values[0].toString());
		}else if (obj instanceof Object) {
			return (Integer)obj;
		}
		return defaultValue;
	}
	
	/**
	 * 从Map中获取指定键对应的int型数组
	 * @author zhouan, 2012-7-21
	 * @param params
	 * @param key
	 * @return
	 */
	public static int[] getIntParametersFromMap(Map params, String key) {
		Object obj = params.get(key);
		if (obj instanceof int[]) {
			int[] values = (int[]) obj;
			return values;
		} else if (obj instanceof Object[]) {
			Object[] objs = (Object[]) obj;
			int[] values = new int[objs.length];
			for (int i = 0; i < values.length; i++) {
				values[i] = Integer.parseInt(objs[i].toString());
			}
			return values;
		}else if (obj instanceof Object) {
			int[] values = new int[]{(Integer)obj};
			return values;
		}
		return new int[0];
	}
	
	/**
	 * 从Map中获取指定键对应的Integer类型型数值
	 * @author zhouan, 2012-7-21
	 * @param params
	 * @param key
	 * @param defaultValue
	 * @return
	 */
	public static Integer getIntegerParameterFromMap(Map params, String key, Integer defaultValue) {
		Object obj = params.get(key);
		if (obj instanceof Object[]) {
			Object[] values = (Object[]) obj;
			if (!values[0].toString().equals(""))
				return Integer.parseInt(values[0].toString());
		}else if (obj instanceof Object) {
			if (!obj.toString().equals(""))
				return (Integer)obj;
		}
		return defaultValue;
	}
}
